Linux中执行定时任务,通常是通过crond这个守护进程来完成的,用ps -ef | grep crond | grep -v grep可以看到。它会从三个地方读取配置文件来进行后台任务的执行:

  1. /var/spool/cron/${USER}
  2. /etc/crontab
  3. /etc/cron.d/*

这些配置文件记录了命令行以及执行周期等信息。下面来分别看看这三种类型的配置文件:

/var/spool/cron/目录下的配置

该目录下新建一个文本文件,并以当前用户名命名,比如当前是root账户登录,则vim root,配置格式是这样:* * * * * 命令

第一个 * 代表每小时中的第几分钟(0-59)
第二个 * 代表每天的第几个小时(0-23)
第三个 * 代表每个月中的第几天(1-31)
第四个 * 代表每年的第几个月(1-12)
第五个 * 代表每周的星期几(0-7,0和7都代表星期日)

特殊符号
,代表不连续的时间。比如0 8,12,16 * * *,就代表在每天的8点0分,12点0分,16点0分各执行一次。
-代表连续的时间范围。比如0 5 * * 1-6,代表在周一到周六的凌晨5点0分执行命令
*/n代表每隔多久执行一次。比如*/10 * * * *,代表每隔10分钟就执行一遍命令

例:

  • 45 22 * * * 命令 在22点45分执行命令
  • 0 17 * * 1 命令 每周1 的17点0分执行命令
  • 0 5 1,15 * * 命令 每月1号和15号的凌晨5点0分执行命令
  • 40 4 * * 1-5 命令 每周一到周五的凌晨4点40分执行命令
  • */10 4 * * * 命令 每天的凌晨4点,每隔10分钟执行一次命令
  • 0 0 1,15 * 1 命令 每月1号和15号,每周1的0点0分都会执行命令。注意:星期几和几号最好不要同时出现,因为他们定义的都是天。非常容易让管理员混乱。

案例
*/1 * * * * echo 'hello' >> /tmp/a.txt 每隔一分钟向/tmp/a.txt中追加一行hello,可以使用tail -f /tmp/a.txt观察

PS:使用crontab -e效果等同于vim /var/spool/cron/${USER}

/etc/crontab配置

这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab。

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

# run-parts
00 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
44 4 1 * * root run-parts /etc/cron.monthly

MAILTO=root是说,当 /etc/crontab 这个档案中的例行性命令发生错误时,会将错误讯息或者是屏幕显示的讯息传给谁。

00 * * * * root run-parts /etc/cron.hourly:在 #run-parts 之后的命令,可以看到,五个占位符后面接的是root,代表以root身份执行。而run-parts代表后面接的/etc/cron.hourly是该目录内(/etc/cron.hourly)的所有可执行文件,也就是说,每个小时的00分,系统会以root身份去/etc/cron.hourly这个目录下执行所有可执行的文件,后面三行也是类似的意思。可以将每天需要执行的命令直接写到/etc/cron.daily即可,这样可以不使用crontab -e。

/etc/cron.d/目录下的配置

该目录用来存放任何要执行的crontab文件或脚本。

权限

查看/etc目录下有没有cron.allow或cron.deny文件,作用如下:

  1. 如果两个文件都不存在,则只有root用户才能使用crontab命令。
  2. 如果cron.allow存在但cron.deny不存在,则只有列在cron.allow文件里的用户才能使用crontab命令,如果root用户也不在里面,则root用户也不能使用crontab。
  3. 如果cron.allow不存在, cron.deny存在,则只有列在cron.deny文件里面的用户不能使用crontab命令,其它用户都能使用。
  4. 如果两个文件都存在,则列在cron.allow文件中而且没有列在cron.deny中的用户可以使用crontab,如果两个文件中都有同一个用户,以cron.allow文件里面是否有该用户为准,如果cron.allow中有该用户,则可以使用crontab命令。

crontab用法

crontab命令用于安装、删除或者列出用于驱动cron后台进程的表格。用户把需要执行的命令序列放到crontab文件中以获得执行。

  • -l 在标准输出上显示当前的crontab。
  • -r 删除当前的crontab文件。
  • -e 使用VISUAL或者EDITOR环境变量所指的编辑器编辑当前的crontab文件。当结束编辑离开时,编辑后的文件将自动安装。

参考

Linux下的crontab定时执行任务命令详解


叫花猫
19 声望2 粉丝

少年,我看你骨骼惊奇,是块写代码的好料,我这儿有一本祖传的《Java从入门到放弃》,只要998。


« 上一篇
聊聊GC
下一篇 »
yum仓库配置